package com.rain.rainspringboot3.encryption.annotation;



import com.rain.rainspringboot3.encryption.enums.DataType;
import com.rain.rainspringboot3.encryption.factory.AESEncryptFactory;
import com.rain.rainspringboot3.encryption.factory.EncryptFactory;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * 加密字段注解
 * 用于标记需要加密的字段，支持自定义加密策略和SpEL表达式
 * @author rain
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface EncryptField {
    /**
     * 数据类型
     */
    DataType type();
    
    /**
     * 加密工厂类
     */
    Class<? extends EncryptFactory> factory() default AESEncryptFactory.class;
    
    /**
     * 是否启用缓存
     */
    boolean cacheable() default true;
    
    /**
     * 缓存过期时间
     */
    long cacheExpire() default 300L;

    /**
     * 缓存过期时间单位
     */
    TimeUnit cacheTimeUnit() default TimeUnit.SECONDS;

    /**
     * 是否采用默认秘钥
     */
    boolean encrypt() default true;


}